package com.lej.core.daq

import android.app.Activity
import com.lej.core.base.app
import com.lej.core.common.LogTags
import com.lej.core.common.PCacheInfo
import com.lej.core.utils.extention.fromJson
import com.lej.core.utils.extention.logI
import com.lej.core.utils.extention.toJson
import com.qmuiteam.qmui.util.QMUIDeviceHelper
import com.umeng.analytics.MobclickAgent
import org.json.JSONObject
import java.util.*

enum class DAQEvent {
    data_error,//数据错误
    http_error,//网络错误

    /* *****************lifecycle********************** */
    activity_create,
    activity_start,
    activity_resume,
    activity_pause,
    activity_stop,
    activity_destroy,

    /* *****************comm********************** */
    bind_cid,//绑定cid
    get_permission,//获取权限
    not_permission,//无权限
    push_location,//上传用户定位
    to_login,//去登录,扩展字段(true:去登录,false:取消)
    home_page_change,//首页page切换

    clock_up,//打卡上传（排行榜，社区，AR）


    //    share_user_info,//分享用户信息
    share_code,//分享邀请码


    /* *****************二选一********************** */
    home_to_clockup,//首页打卡

    //    /**[personalpage]*/
//    to_my_info,//跳转个人中心
//    to_session_list,//跳转消息列表
    home_overview_change,//首页page切换
    unlock_pick_user,//解锁二选一
    pick_to_user_info,//二选一进入用户详情页面

    /* *****************二碰一********************** */
//    home_left_pick_change,//二碰一左边page切换
//    home_right_pick_change,//二碰一右边page切换

    result_unlock_to_pick_page,//结果页加速
    result_to_pick_page,//结果页进入二碰一
    result_unlock_to_user_info,//结果页解锁跳转用户详情

    task_to_coupons_page,//查看我的积分
//    task_to_share_page,//任务页面跳转到分享页面

    task_get_reward,//领取奖励
    task_action_click,//完成任务

    /* *****************榜单********************** */
//    rank_item_click,//榜单条目点击
    unlock_rank,//解锁榜单
    see_other_rank,//查看其它榜单


    rank_card_change,//榜单卡片切换
    rank_list_click,//榜单进入私聊

    user_info_to_p2p,//用户信息页面跳转到私聊页面 //sayHi
//    user_info_to_rank,//用户详情页跳转到榜单

    /* *****************用户信息页********************** */
//    user_info_see_more,//用户信息页查看更多
    video_mute,//视频静音
    user_info_page_change,//用户信息页面页面切换

    hide_user_info,//隐藏底部信息弹窗

    /* *****************battle********************** */
    click_battle,//发起battle
    see_battle,//查看battle
    user_info_to_other_battle,//从用户详情页查看对方battle页
    get_battle_reward,//领取奖金
    battle_wave_pay,//battle充气波充值
    help_battle_wave,//助力充气波

    /* *****************榜单********************** */
    community_page_change,//社区标签切换
    community_type_change,//查看类型切换
    community_list_click,//点击社区列表进入聊天室

    /* *****************聊天模块********************** */
    notify_to_p2p,//通知消息跳转到私聊页面
    send_battle_heart,//赠送小心心

    //    chat_p2p_horizontal_change_page,//私聊左右切换
    chat_room_horizontal_change_page,//聊天室左右切换

    open_ai_window,//打开ai悬浮窗
    check_face_score,//测颜值
    check_face_mirror,//照妖镜


//    p2p_to_user_info,//私聊页面跳转用户详情页面


    //    p2p_send_msg,//私聊发送消息
    room_send_msg,//聊天室发送消息,true:悄悄话,false:普通消息

    /* *****************登录注册********************** */
    login_commit,//登录
    login_send_code,//发送验证码
    login_see_protocol,//查看隐私协议/使用协议
    login_change_status,//更改勾选状态

    select_card,//选择学校
    select_code,//选择邀请码
    skip_card_push,//跳过上传学生证
    skip_invitation_code,//跳过输入邀请码
    card_push,//上传证件照

    //填写邀请码
    invitation_code,//邀请码

    //人脸认证
    face_check,//人脸认证

    //    face_help,//help
    face_next_upload,//进入上传头像
    face_retry,//重新进行人脸识别


    //上传头像
    upload_head,//上传头像
    get_school_list_info,//获取学校列表
    input_school_commit,//输入自定义学校
    select_at_school,//选择是否在校
    student_card_push,//上传学生证照片
    student_card_info_commit,//提交学生证资料
//    confirm_self,//确认是我本人

    //完善资料
    input_user_info_commit,//提交用户资料

    login_commit_success,//登录成功
    login_commit_failure,//登录失败


    /* *****************个人信息********************** */
    reset_user_info,//编辑用户资料

    check_xingbiao,//星标
    check_shoucang,//收藏

    //    check_jubao,//点击举报
    check_roomavatar_detail, //点击群聊列表头像查看详情
//    check_avatar_detail,//点击博主头像查看详情

    setting_info,//设置修改
    recharge,//充值
    edit_info_del_photo,//编辑页面删除动态
//    preview_user_info,//编辑资料页预览

    coupons_usage,//砰砰券使用
    coupons_close,//取消砰砰券使用

    //    vip_page_change,//vip切换
    vip_index_change,//支付条目切换
    vip_see_protocol,//查看会员协议

    //    vip_pay,//vip支付
    wx_pay,//微信支付
    aipay_pay,//支付宝支付


    //    my_info_to_share,//个人信息页跳转分享
//    my_info_to_ai_mirror,//个人信息页跳转照妖镜
//    my_info_to_rank,//个人信息页跳转解锁排行榜
//    my_info_to_my_star,//个人信息页跳转我的星标
//    my_info_to_star_me,//个人信息页跳转星标我

    //打卡
    change_avatar,//更换头像
    change_nickname,//更换昵称


    quit_account,//退出登录


    /**1.0.25*/
    share_copy_peng_code,//分享解析碰口令成功

    /**积分权限相关*/
    privilege_consume, // 使用特权
    privilege_dialog_show,//特权弹窗展示
    privilege_dialog_close,//特权弹窗点击关闭
    privilege_dialog_click_get_vip,//特权弹窗点击成为星探
    privilege_dialog_click_use_coupons,//特权弹窗点击使用积分
    privilege_dialog_click_get_coupons,//特权弹窗点击获取免费积分

    push_dispatcher,//推送分发

    /**1.1.1*/
    result_page_enter,//进入结果页
    result_to_p2p_immediately_chat,//结果页立即聊天
    pick_page_to_result,//二碰一进入结果页
    clockup_push,//打卡提交
    push_ai_check,//打卡ai分析

    privilege_dialog_click_use_vip_time,//特权弹窗有vip免费次数下使用特权
    privilege_dialog_show_vip_time_enough,//vip次数的特权弹窗展示

    face_error,//人脸异常上报
    camera_size_warning,//相机尺寸异常上报
    notify_list_jump,//通知页面跳转

    result_battle_to_user_info,//从结果页battle进入用户详情

    /**1.1.3*/
//    send_redpacket_click,  //点击赠送红包
    send_redpacket_pay_success,  //点击赠送红包支付成功

    //    send_gift_click,      //点击礼物
    send_gift_item_click,     //点击礼物具体项
    see_red_packet_detail,//查看红包详情
    draw_red_packet,//领取红包
    send_red_packet_msg,//发送红包消息

    /**1.1.8*/
    like_me_rank_click, //喜欢我的人排行榜点击
    like_rank_click,//喜欢的人排行榜点击
    like_expand_no_photo_list,//喜欢我的人看没图片的人文字点击


    /**新埋点 产品约定--一玮 */
    pickpage,//进入二碰一页面

    ///个人中心
    personalpage,// 点击左上角人中心
    pic_real_homepage,//真人照认证
    pic_real_back,//真人认证页面返回
    pic_real_bub,//真人认证页面提示气泡
    pic_real_start,//真人认证页面开始认证
    pic_real_skip_coverplan,//真人认证成功跳转封面照
    pic_real_cancel,//真人认证成功后取消

    ///封面照
    pic_coverplan_homepage,//封面照
    pic_coverplan_pop_cancel,//封面照弹窗取消
    pic_coverplan_pop_upload,//封面照弹窗上传照片
    pic_coverplan_back,//封面照页面返回
    pic_coverplan_upload,//封面照页面上传照片
    pic_coverplan_camera_permis,//封面照上传照片相机权限
    pic_coverplan_button_fake_reload,//非真人弹窗重新上传按钮
    pic_coverplan_button_unself_reload,//非本人弹窗重新上传
    pic_coverplan_button_unself_confirm,//非本人弹窗确认本人

    ///学校认证
    personalpage_school,

    //上传编辑
    pic_edit,
    pic_edit_button_back,//编辑照片页面返回按钮
    pic_edit_preview,//编辑照片页面预览
    pic_edit_change,//编辑照片页面封面照更换
    pic_edit_add,//编辑照片页面添加照片
    pic_edit_move,//照片剪裁区域拖动
    pic_edit_button_delete,//原有照片删除

    personaldata_edit_button_back,//编辑资料页面返回按钮
    personaldata_edit_preview,//编辑资料页面预览
    personaldata_edit_name,//编辑资料页面昵称
    personaldata_edit_sex,//编辑资料页面性别
    personaldata_edit_birthday,//编辑资料页面生日
    personaldata_edit_star,//编辑资料页面星座
    personaldata_edit_age,//编辑资料页面是否展示年龄
    personaldata_edit_school,//编辑资料页面学校认证
    personaldata_edit_major,//编辑资料页面专业选择
    personaldata_edit_graduation,//编辑资料页面是否毕业
    personaldata_edit_job,//编辑资料页面职业
    personaldata_edit_selfintroduction,//编辑资料页面自我介绍
    personaldata_edit_ask,//编辑资料页面问答
    personaldata_edit_buttton_askback,//编辑资料页面问答返回按钮


    personalpage_myguys,//个人页面我的喜欢
    personalpage_skip_detailspage, //个人页面我的喜欢跳转详情页
    personalpage_belike, //个人页面谁喜欢了我

    personalpage_belike_button, //个人页面谁喜欢了我查看按钮
    personalpage_belike_skip_detailspage, //个人页面谁喜欢了我跳转详情页
    personalpage_ranklist, //个人页面我看过的排行榜
    personalpage_ranklist_skip_rankpage,//2个人页面我看过的排行榜跳转榜单页
    personalpage_share, //个人页面邀请码
    share_copy, //邀请码复制
    share_now,//立即邀请

    personalpage_pengpro, //2个人页面我的会员

    pengpro_change,//3会员类别跳转
    pengpro_list, //会员功能点击
    pengpro_pay, //支付

    personalpage_coupon, //1个人页面我的积分

    coupon_details,  //积分明细
    coupon_pop, //什么是积分气泡
    coupon_skip_sharepage, //积分跳转邀请页
    task, //3今日任务

    personalpage_wallet, //个人页面我的钱包
    personalpage_ai,//个人页面AI照妖镜
    personalpage_advise, //个人页面反馈
    personalpage_install, //个人页面设置

    ///消息中心
    news,//点击右上角消息中心
    news_skip_chatpage,//消息列表点击跳转聊天页

    myguys,//首页我的喜欢
    myguys_skip_detailspage,//我的喜欢跳转详情页

    left_overview_change,//首页左边上下滑动
    right_overview_change,//首页右边上下滑动

    overview_pop_limit,//滑动人数上限弹窗
    overview_pop_button_coupon,//上限弹窗免费继续看
    overview_pop_button_skip_pengpro,//上限弹窗会员跳转

    ///详情页
    detailspage,//用户详情页
    detailspage_button_back, //详情页面返回按钮
    detailspage_menu, //详情页面右上角菜单
    detailspage_click_pic, //详情页面照片点击
    detailspage_click_data, //详情页面资料栏点击
    detailspage_skip_rankpage, //详情页跳转榜单页
    detailspage_click_heart, //详情页点击爱心
    detailspage_skip_love, //详情页跳转红包
    detailspage_skip_chatpage, //详情页跳转私聊
    detailspage_sharedata, //详情页分享个人资料
    detailspage_complain, //详情页举报

    chatpage,//私聊页面
    chatpage_image_skip_detailspage,//私聊头像跳转详情页
    chatpage_image_leftright,//私聊背景图片左右滑动
    chatpage_text_longpress,//私聊长按选项
    chatpage_test_send,//私聊信息发送
    chatpage_heart,//私聊右下角爱心功能键
    chatpage_heart_redbag,//功能键赠送红包
    chatpage_heart_gift,//功能键赠送礼物
    chatpage_heart_heart,//功能键赠送爱心

    rankpage,//榜单页面
    rankpage_skip_detailspage,//榜单页跳转详情页

    register,//注册页面
    register_number,  //手机号码输入
    register_number_button_error,  //手机号错误按钮
    register_number_button_again,  //重新发送按钮
    register_skipcode,  //跳过邀请码
    register_errorcode,  //无效邀请码
    register_button_boy,  //男生选项
    register_button_girl,  //女生选项
    register_button_graduate,  //毕业选项
    register_button_scholl,  //在校选项
    register_school_button_click,  //备选项点击
    register_school_button_slip,  //备选项滑动

    register_button_case,//查看案例
    register_button_list,//随便看看按钮
    register_button_task,//开始任务按钮

    //任务页面
    detailspage_skip_taskdetail,//任务信息流跳转任务详情

    task_skip_zc_taskdetail,//种草任务跳转详情页
    task_skip_zb_taskdetail,//直播任务跳转详情页

    /* *****************end********************** */

    //region *************************自定义***************************************
    newPage,//新人
    rankPage,//榜单
    selfPage,//个人中心
    //endregion *****************************************************************

    //region *************************add by 2021.01.07****************************************
    taskpage,//接单
    task_skip_banner,//轮播图点击
    task_skip_detailspage,//跑马灯点击
    task_zc,//种草任务列表
    task_zb,//直播任务列表
    task_jf,//积分任务列表
    rankpage_zc_skip_detailspage,//种草达人榜跳转详情页
    rankpage_zb_skip_detailspage,//直播达人榜跳转详情页
    rankpage_rm_skip_detailspage,//热门榜单跳转详情页
    rankpage_ljcb,//立即冲榜
    rankpage_skip_task,//立即冲榜跳转任务列表
    rankpage_skip_photo,//立即冲榜跳转上传照片
    rankpage_skip_details,//立即冲榜跳转个人页分享
    //endregion *************************new****************************************

    ;
    /* *************************page***************************************** */
    /**
     * 上报activity生命周期
     * activity_create,activity_start,activity_resume,activity_pause,activity_stop,activity_destroy专属方法
     */
    fun eventPage(activity: Activity) {
        val page = activity.javaClass.simpleName
        val event = ActionEvent(name, null, page)
        if (app.isDebug) return
        if (isTestUID()) return

        "页面${name}:${page}".logI(LogTags.page)
        MobclickAgent.onEvent(app, "action", event.toEventArrayStr())
    }

    /**
     * 普通事件
     */
    fun mobEvent(expand: String? = null, page: String? = null) {
        "页面:$page->$name".logI(LogTags.action)
        val event = ActionEvent(name, expand, page)
        val map = event.toJson().fromJson<HashMap<String, String>>()

        if (app.isDebug) return
        if (isTestUID()) return

        MobclickAgent.onEvent(app, "action", event.toEventArrayStr())
        MobclickAgent.onEvent(app, name, map)
    }

    /**网络请求*/
    fun eventHttp(chainMs: Long, isSuc: Boolean, httpCode: Int, body: String?, segment: String) {
        if (app.isDebug) return
        if (isTestUID()) return

        fun onEvent(event: HttpInfo) {
            MobclickAgent.onEvent(app, "http_info", event.toEventArrayStr())
            // 埋点双方案>
            MobclickAgent.onEvent(app, name, event.toJson().fromJson<HashMap<String, String>>())
        }
        if (!isSuc) {
            val event = HttpInfo(segment, chainMs, httpCode, -1)
            onEvent(event)
            return
        }
        if (body.isNullOrEmpty()) {
            val event = HttpInfo(segment, chainMs, 200, -1)
            onEvent(event)
            return
        }
        val code = kotlin.runCatching { JSONObject(body).getInt("code") }.getOrElse { -1 }
        //正常网络请求并且请求时间少于1000ms不上报
        if (code != 200 || chainMs > 1000) {
            val event = HttpInfo(segment, chainMs, 200, code)
            onEvent(event)
        }
    }

    companion object {
        fun reportAccount(uid: String) {
            MobclickAgent.onProfileSignIn(uid)
        }

        fun removeAccount() {
            MobclickAgent.onProfileSignOff()
        }

        /** 初次启动的时候调用*/
        fun eventDev() {
            if (app.isDebug) return
            if (isTestUID()) return
            val dev = when {
                QMUIDeviceHelper.isHuawei() -> "huawei"
                QMUIDeviceHelper.isMIUI() -> "miui"
                QMUIDeviceHelper.isOppo() -> "oppo"
                QMUIDeviceHelper.isVivo() -> "vivo"
                QMUIDeviceHelper.isFlyme() -> "flyme"
                else -> "unknown"
            }
            val devInfo = DevInfo(dev)
            MobclickAgent.onEvent(app, "dev_info", devInfo.toEventArrayStr())

            // 埋点双方案>
            MobclickAgent.onEvent(
                app,
                "dev_info",
                devInfo.toJson().fromJson<HashMap<String, String>>()
            )
        }

        /** 转换成Json数组形式，在action埋点中上报，只支持[DAQOrder]注解的字段*/
        private inline fun <reified T> T.toEventArrayStr(): String {
            val fields = T::class.java.declaredFields
            val sortFields = fields.filter { it.getAnnotation(DAQOrder::class.java) != null }
                .sortedBy { it.getAnnotation(DAQOrder::class.java)?.order ?: 0 }
            ///输出 数组json
            return sortFields.map { it.isAccessible = true;it.get(this) }.toJson()
        }


        private val testUidList = arrayListOf(
            20250,
            19985,
            29584,
            200937,
            20401,
            20170,
            20151,
            19980,
            20136,
            3575,
            19989,
            200943,
            20281,
            20138,
            3554,
            9415,
        )

        /**过滤测试帐号*/
        private fun isTestUID() = testUidList.contains(PCacheInfo.userId)
    }
}


///1.1.9新增埋点
//pickpage,进入二碰一页面,0
//personalpage,点击左上角人中心,0
//pic_real_homepage,真人照认证,0
//pic_real_back,真人认证页面返回,0
//pic_real_bub,真人认证页面提示气泡,0
//pic_real_start,真人认证页面开始认证,0
//pic_real_skip_coverplan,真人认证成功跳转封面照,0
//pic_real_cancel,真人认证成功后取消,0
//pic_coverplan_homepage,封面照,0
//pic_coverplan_pop_cancel,封面照弹窗取消,0
//pic_coverplan_pop_upload,封面照弹窗上传照片,0
//pic_coverplan_back,封面照页面返回,0
//pic_coverplan_upload,封面照页面上传照片,0
//pic_coverplan_camera_permis,封面照上传照片相机权限,0
//pic_coverplan_button_fake_reload,非真人弹窗重新上传按钮,0
//pic_coverplan_button_unself_reload,非本人弹窗重新上传,0
//pic_coverplan_button_unself_confirm,非本人弹窗确认本人,0
//personalpage_school,学校认证,0
//pic_edit,编辑照片,0
//pic_edit_button_back,编辑照片页面返回按钮,0
//pic_edit_preview,编辑照片页面预览,0
//pic_edit_change,编辑照片页面封面照更换,0
//pic_edit_add,编辑照片页面添加照片,0
//pic_edit_move,照片剪裁区域拖动,0
//pic_edit_button_delete,原有照片删除,0
//personaldata_edit_button_back,编辑资料页面返回按钮,0
//personaldata_edit_preview,编辑资料页面预览,0
//personaldata_edit_name,编辑资料页面昵称,0
//personaldata_edit_sex,编辑资料页面性别,0
//personaldata_edit_birthday,编辑资料页面生日,0
//personaldata_edit_star,编辑资料页面星座,0
//personaldata_edit_age,编辑资料页面是否展示年龄,0
//personaldata_edit_school,编辑资料页面学校认证,0
//personaldata_edit_major,编辑资料页面专业选择,0
//personaldata_edit_graduation,编辑资料页面是否毕业,0
//personaldata_edit_job,编辑资料页面职业,0
//personaldata_edit_selfintroduction,编辑资料页面自我介绍,0
//personaldata_edit_ask,编辑资料页面问答,0
//personaldata_edit_buttton_askback,编辑资料页面问答返回按钮,0
//personalpage_myguys,个人页面我的喜欢,0
//personalpage_skip_detailspage,个人页面我的喜欢跳转详情页,0
//personalpage_belike,个人页面谁喜欢了我,0
//personalpage_belike_button,个人页面谁喜欢了我查看按钮,0
//personalpage_belike_skip_detailspage,个人页面谁喜欢了我跳转详情页,0
//personalpage_ranklist,个人页面我看过的排行榜,0
//personalpage_ranklist_skip_rankpage,2个人页面我看过的排行榜跳转榜单页,0
//personalpage_share,个人页面邀请码,0
//share_copy,邀请码复制,0
//share_now,立即邀请,0
//personalpage_pengpro,2个人页面我的会员,0
//pengpro_change,3会员类别跳转,0
//pengpro_list,会员功能点击,0
//pengpro_pay,支付,0
//personalpage_coupon,1个人页面我的积分,0
//coupon_details,积分明细,0
//coupon_pop,什么是积分气泡,0
//coupon_skip_sharepage,积分跳转邀请页,0
//task,3今日任务,0
//personalpage_wallet,个人页面我的钱包,0
//personalpage_ai,个人页面AI照妖镜,0
//personalpage_advise,个人页面反馈,0
//personalpage_install,个人页面设置,0
//news,点击右上角消息中心,0
//news_skip_chatpage,消息列表点击跳转聊天页,0
//myguys,首页我的喜欢,0
//myguys_skip_detailspage,我的喜欢跳转详情页,0
//left_overview_change,首页左边上下滑动,0
//right_overview_change,首页右边上下滑动,0
//overview_pop_limit,滑动人数上限弹窗,0
//overview_pop_button_coupon,上限弹窗免费继续看,0
//overview_pop_button_skip_pengpro,上限弹窗会员跳转,0
//detailspage,用户详情页,0
//detailspage_button_back,详情页面返回按钮,0
//detailspage_menu,详情页面右上角菜单,0
//detailspage_click_pic,详情页面照片点击,0
//detailspage_click_data,详情页面资料栏点击,0
//detailspage_skip_rankpage,详情页跳转榜单页,0
//detailspage_click_heart,详情页点击爱心,0
//detailspage_skip_love,详情页跳转红包,0
//detailspage_skip_chatpage,详情页跳转私聊,0
//detailspage_sharedata,详情页分享个人资料,0
//detailspage_complain,详情页举报,0
//chatpage,私聊页面,0
//chatpage_image_skip_detailspage,私聊头像跳转详情页,0
//chatpage_image_leftright,私聊背景图片左右滑动,0
//chatpage_text_longpress,私聊长按选项,0
//chatpage_test_send,私聊信息发送,0
//chatpage_heart,私聊右下角爱心功能键,0
//chatpage_heart_redbag,功能键赠送红包,0
//chatpage_heart_gift,功能键赠送礼物,0
//chatpage_heart_heart,功能键赠送爱心,0
//rankpage,榜单页面,0
//rankpage_skip_detailspage,榜单页跳转详情页,0
//register,注册页面,0
//register_number,手机号码输入,0
//register_number_button_error,手机号错误按钮,0
//register_number_button_again,重新发送按钮,0
//register_skipcode,跳过邀请码,0
//register_errorcode,无效邀请码,0
//register_button_boy,男生选项,0
//register_button_girl,女生选项,0
//register_button_graduate,毕业选项,0
//register_button_scholl,在校选项,0
//register_school_button_click,备选项点击,0
//register_school_button_slip,备选项滑动,0
//register_button_finish,加入计划按钮,0
